/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.libros.controler;

import com.libros.model.BeanBDLibros;
import com.libros.model.BeanDatosLibro;
import com.libros.model.BeanUsuario;
import com.libros.model.Seguimientos;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Sefer Sephirott
 */
public class SvLibros extends HttpServlet {
    
    private BeanBDLibros bdlibros;
    private BeanUsuario usuario;
    private ArrayList<BeanDatosLibro> librosDisponibles, librosEnCarrito;
    private int nroLibrosCarrito;
    private Seguimientos nota = new Seguimientos();
    private String tipo;
    private String buscar;
    private int aviso;
    private int totalCompra;
    


    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {}


    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
       try {
            
            
            nota = new Seguimientos();
            
            HttpSession sesionCliente = request.getSession();
            
            bdlibros = new BeanBDLibros();
            librosDisponibles = new ArrayList<BeanDatosLibro>();
            librosEnCarrito = new ArrayList<BeanDatosLibro>();
            
            String tipoForm = request.getParameter("tipoForm");
            String foward = request.getParameter("foward");
            
            //System.out.println("tipoForm = "+tipoForm);
            //System.out.println("foward = "+foward);
            
            if(!foward.equals("") && tipoForm.equals("")){
                
                request.setAttribute("usuario", sesionCliente.getAttribute("user"));
                //System.out.println("Dispacher a "+foward);
                RequestDispatcher dispacher = request.getRequestDispatcher(foward);

                if(dispacher != null){

                    dispacher.forward(request, response);
                }
            }
            
            
            /* Formulario de Busqueda */
            if(tipoForm != null && tipoForm.equals("1")){
                
                //nota.nota("Entro a Buscar");
                tipo = request.getParameter("tpdo_busqueda");
                buscar = request.getParameter("txtBuscar");
                //nota.nota("Tipo : "+tipo);
                //nota.nota("Buscar : "+buscar);
                
                /* Genera la busqueda de libros segun el parametro de busqueda */
                request.setAttribute("usuario", sesionCliente.getAttribute("user"));
                procesaBusquedaLibro(request, response, tipo, buscar,0);
                
            }
            /* Creacion de Cliente */
            if(tipoForm != null && tipoForm.equals("2")){
                
                    String nombre = request.getParameter("nombre");
                    String dir = request.getParameter("direccion");
                    int tel = Integer.parseInt(request.getParameter("telefono"));
                    String nick = request.getParameter("nick");
                    String pass = request.getParameter("pass");

                    /* Crear Cliente en la Base de Datos */
                    creaCliente(nombre, dir, tel, nick, pass, request, response);

            }
            /* Autenticacion */
            if(tipoForm != null && tipoForm.equals("3")){
                
                String userCliente = request.getParameter("usuario");
                String userClave = request.getParameter("clave");
                
                /* Autenticar Usuario */
                autenticarCliente(userCliente, userClave, request, response);
                
            }
            
            if(tipoForm != null && tipoForm.equals("4")){
                
                nota.nota("Entro a 4");
                
                int idLibro = Integer.parseInt(request.getParameter("idlibro"));
                int cantLibro = Integer.parseInt(request.getParameter("cantLibro"));
                
                /* @Test */
                ArrayList<BeanDatosLibro> lib = setLibrosCarrito(idLibro, cantLibro, request, response);
                
                for(int i=0; i<lib.size(); i++){
                    
                    
                    totalCompra +=  (lib.get(i).getValor() * lib.get(i).getCantidad());
                } 
                /* @ */
                
                
                sesionCliente.setAttribute("librosEnCarrito", lib);
                
                sesionCliente.setAttribute("totalCompra", totalCompra);
                
                //-----------------------------------
                procesaBusquedaLibro(request, response, tipo, buscar,1);
                
            }
            
            
        } catch (SQLException ex) {
            Logger.getLogger(SvLibros.class.getName()).log(Level.SEVERE, null, ex);
        } finally {            
            //out.close();
        }
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    
    /* METHODS ==============================================================================================================================================================*/
    /**
     * 
     * @param request
     * @param response
     * @param p_tipo
     * @param p_buscar
     * @throws ServletException
     * @throws IOException 
     */
    public void procesaBusquedaLibro(HttpServletRequest request, HttpServletResponse response, String p_tipo, String p_buscar, int aviso) 
                                    throws ServletException, IOException{
        
        
        
        // ArrayList<BeanDatosLibro>
        librosDisponibles = bdlibros.getLibros(p_tipo, p_buscar);
        request.setAttribute("libros", librosDisponibles);
        
        if(aviso == 1){
            request.setAttribute("aviso", aviso);
        }
        
        
        RequestDispatcher dispacher = request.getRequestDispatcher("/Resultado.jsp");

        if(dispacher != null){

            dispacher.forward(request, response);
        }

        
        
    }
    
    
    /* METHODS ==============================================================================================================================================================*/
    
    /**
     * 
     * @param nombre
     * @param dir
     * @param tel
     * @param nick
     * @param pass
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException 
     */
    public void creaCliente(String nombre,String dir,int tel, String nick, String pass, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        
        String mensaje = bdlibros.creaCliente(nombre, dir, tel, nick, pass);
        
        if(mensaje.contains("Error")){
            request.setAttribute("tipo", "-1");
        }
        else{
            request.setAttribute("tipo", "1");
        }
        
        if(mensaje.contains("Cliente Creado correctamente")){
            request.setAttribute("nombre", "");
            request.setAttribute("dir", "");
            request.setAttribute("tel", "");
            request.setAttribute("nick", "");
        }else{
            request.setAttribute("nombre", nombre);
            request.setAttribute("dir", dir);
            request.setAttribute("tel", tel);
            request.setAttribute("nick", nick);
        }
        
        request.setAttribute("mensaje", mensaje);
        
        RequestDispatcher dispacher = request.getRequestDispatcher("/RegistroCliente.jsp");

        if(dispacher != null){

            dispacher.forward(request, response);
        }
    }
    
    
    /* METHODS ==============================================================================================================================================================*/
    /**
     * 
     * @param user
     * @param pass
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     * @throws SQLException 
     */
    public void autenticarCliente(String user, String pass, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException{
        
        usuario = bdlibros.autenticacion(user, pass);
        String val = bdlibros.getMensajeBeanBDLibros();

        if(val.contains("Autenticado")){
            
            HttpSession sesionCliente = request.getSession(true);
            
            sesionCliente.setAttribute("user", usuario.getNombre());
            request.setAttribute("usuario", sesionCliente.getAttribute("user"));
        }
        if(val.contains("incorrecto")){
            
            request.setAttribute("mensaje", val);
        }
        if(val.contains("NO existe")){
            request.setAttribute("mensaje", val);
        }
        
        RequestDispatcher dispacher = request.getRequestDispatcher("/index.jsp");

        if(dispacher != null){

            dispacher.forward(request, response);
        }
        
        
    }

    
    public ArrayList<BeanDatosLibro> setLibrosCarrito(int idLibro, int cant, HttpServletRequest request, HttpServletResponse response){
        
        librosEnCarrito.add(bdlibros.libroParaCarrito(idLibro, cant));
        
        return librosEnCarrito;
    }
}
